// app/controller/report_controller.js
'use strict';

const { Controller } = require('egg');
const Joi = require('joi');

class ReportController extends Controller {
  // 生成对账报告
  async generateReport() {
    const { ctx } = this;
    const { startDate, endDate } = ctx.query;
    
    try {
      // 使用Joi验证服务进行参数验证
      const schema = Joi.object({
        startDate: Joi.date().iso().optional(),
        endDate: Joi.date().iso().optional()
      });
      
      const validation = schema.validate({ startDate, endDate });
      if (validation.error) {
        ctx.error(`参数验证失败: ${validation.error.message}`);
        return;
      }
      
      const report = await ctx.service.smartReportService.generateReconciliationReport({
        startDate,
        endDate
      });
      
      ctx.success(report, '对账报告生成成功');
    } catch (error) {
      ctx.logger.error('生成对账报告失败:', error);
      ctx.error('生成对账报告失败: ' + error.message);
    }
  }
  
  // 获取匹配统计信息
  async getMatchStatistics() {
    const { ctx } = this;
    
    try {
      const statistics = await ctx.service.smartReportService.getMatchStatisticsVisualization();
      ctx.success(statistics, '匹配统计信息获取成功');
    } catch (error) {
      ctx.logger.error('获取匹配统计信息失败:', error);
      ctx.error('获取匹配统计信息失败: ' + error.message);
    }
  }
  
  // 获取客户付款习惯分析
  async getCustomerHabits() {
    const { ctx } = this;
    
    try {
      const habits = await ctx.service.smartReportService.getCustomerPaymentHabits();
      ctx.success(habits, '客户付款习惯分析获取成功');
    } catch (error) {
      ctx.logger.error('获取客户付款习惯分析失败:', error);
      ctx.error('获取客户付款习惯分析失败: ' + error.message);
    }
  }
  
  // 获取智能建议
  async getSmartSuggestions() {
    const { ctx } = this;
    
    try {
      const suggestions = await ctx.service.smartReportService.getSmartSuggestions();
      ctx.success(suggestions, '智能建议获取成功');
    } catch (error) {
      ctx.logger.error('获取智能建议失败:', error);
      ctx.error('获取智能建议失败: ' + error.message);
    }
  }
  
  // 获取智能催款建议 - 新增方法
  async getSmartCollectionSuggestions() {
    const { ctx } = this;
    const { orderId } = ctx.query;
    
    try {
      // 使用Joi验证服务进行参数验证
      const schema = Joi.object({
        orderId: Joi.number().integer().positive().required()
      });
      
      const validation = schema.validate({ orderId });
      if (validation.error) {
        ctx.error(`参数验证失败: ${validation.error.message}`);
        return;
      }
      
      const suggestions = await ctx.service.smartReportService.getSmartCollectionSuggestions(orderId);
      ctx.success(suggestions, '智能催款建议获取成功');
    } catch (error) {
      ctx.logger.error('获取智能催款建议失败:', error);
      ctx.error('获取智能催款建议失败: ' + error.message);
    }
  }
  
  // 获取统计分析数据 - 新增方法
  async getStatisticsAnalysis() {
    const { ctx } = this;
    const { startDate, endDate } = ctx.query;
    
    try {
      // 使用Joi验证服务进行参数验证
      const schema = Joi.object({
        startDate: Joi.date().iso().optional(),
        endDate: Joi.date().iso().optional()
      });
      
      const validation = schema.validate({ startDate, endDate });
      if (validation.error) {
        ctx.error(`参数验证失败: ${validation.error.message}`);
        return;
      }
      
      const analysisData = await ctx.service.smartReportService.getStatisticsAnalysis({
        startDate,
        endDate
      });
      
      ctx.success(analysisData, '统计分析数据获取成功');
    } catch (error) {
      ctx.logger.error('获取统计分析数据失败:', error);
      ctx.error('获取统计分析数据失败: ' + error.message);
    }
  }
  
  // 获取建议执行跟踪数据 - 新增方法
  async getExecutionTracking() {
    const { ctx } = this;
    
    try {
      const trackingData = await ctx.service.smartReportService.getExecutionTracking();
      ctx.success(trackingData, '建议执行跟踪数据获取成功');
    } catch (error) {
      ctx.logger.error('获取建议执行跟踪数据失败:', error);
      ctx.error('获取建议执行跟踪数据失败: ' + error.message);
    }
  }
}

module.exports = ReportController;